home *** CD-ROM | disk | FTP | other *** search
- '===========================================================================
- 'QBASIC'de de çalìƒìr
- ' bu dilde bellek sorunu nedeniyle yavaƒ bir hìz seçiniz.
-
- 'QuickBasic de çalìƒmasì için ise versiyon 7.1 QBX /L QBX /C:32000
- ' versiyon 4.5 QB /L QB /C:32000
- ' ƒeklinde yüklenmelidir.
-
- 'Her türlü modemde çalìƒan iletiƒim programì Çekirdek mödülü
- '===========================================================================
- DECLARE SUB EkranAc (Tip!)
- DECLARE SUB Terminal ()
- DECLARE SUB ModemiKapa (ModemAdresi!)
- DECLARE SUB ModemiAc (ModemAdresi!, Hiz!, IrqNo!)
- DIM SHARED Sakla(27)
- '===========================================================================
- 'Deºiƒkenler
- 'Kendi modem bilgilerinizi giriniz
- Irq = 5: Port = &H3E8: Baud = 57600: Ansi = 1
-
- 'Seçenekler
- 'Irq = 2: Port = &H2E8: Baud = 2400 : Ansi = 1
- 'Irq = 3: Port = &H2F8: Baud = 4800 : Ansi = 0
- 'Irq = 4: Port = &H3E8: Baud = 9600
- 'Irq = 5: Port = &H3F8: Baud = 14400
- 'Irq = 7 : Baud = 19200
- ' Baud = 38400
- ' Baud = 57600
- ' Baud = 115200
- '===========================================================================
- 'Program baƒlangìcì
- CALL ModemiAc(Port, Baud, Irq)
- EkranAc (Ansi)
- Terminal
- ModemiKapa (Port)
- END
- '===========================================================================
- 'IRQ hattìnìn açìlmasì için makine dili yordamì
- IRQSerbest:
- DATA &H50 : 'PUSH AX
- DATA &H53 : 'PUSH BX
- DATA &H51 : 'PUSH CX
- DATA &HFA : 'CLI
- DATA &H31, &HC9 : 'XOR CX,CX
- DATA &HB1, 2 : 'MOV CL,02
- DATA &HBB, 1, 0 : 'MOV BX,0001
- DATA &HD3, &HE3 : 'SHL BX,CL
- DATA &HF7, &HD3 : 'NOT BX
- DATA &HE4, &HA1 : 'IN AL,A1
- DATA &H20, &HF8 : 'AND AL,BH
- DATA &HE6, &HA1 : 'OUT A1,AL
- DATA &HE4, &H21 : 'IN AL,21
- DATA &H20, &HD8 : 'AND AL,BL
- DATA &HE6, &H21 : 'OUT 21,AL
- DATA &HFB : 'STI
- DATA &H59 : 'POP CX
- DATA &H5B : 'POP BX
- DATA &H58 : 'POP AX
- DATA &HCB : 'RETF
-
- 'Ekran Ansi veya TTY modda açìlìyor
- SUB EkranAc (Tip)
- IF Tip = 1 THEN
- OPEN "CON" FOR OUTPUT AS #2 'Ansi
- ELSE
- OPEN "SCRN:" FOR OUTPUT AS #2 'TTY
- END IF
- END SUB
-
- SUB ModemiAc (ModemAdresi, Hiz, IrqNo)
-
- '===========================================================================
- 'Bazì deºerler saklanìyor
- DEF SEG = 0
- FOR I = 40 TO 63 'ÿnterrupt adresleri
- Sakla(I - 40) = PEEK(I)
- NEXT
- Sakla(24) = INP(&H21) '8259 (PIC) deºerleri
- Sakla(25) = INP(&HA1)
- Sakla(26) = PEEK(1026) 'Com2 eski aygìt adresi
- Sakla(27) = PEEK(1027)
-
- '===========================================================================
- 'Com2'ye bizim modem atanìyor
- POKE 1027, ModemAdresi \ 256
- POKE 1026, ModemAdresi AND 255
-
- '===========================================================================
- 'Yeni aygìt (bizim modem) açìlìyor
- OPEN "Com2:2400,N,8,1" FOR RANDOM AS #1
-
- '===========================================================================
- 'Modem seçilen hìz için ayarlanìyor
- Sakla = INP(ModemAdresi + 3)
- OUT ModemAdresi + 3, 128
- OUT ModemAdresi, 115200 / Hiz
- OUT ModemAdresi + 3, Sakla
-
- '===========================================================================
- 'Com2'ye ait IRQ3 kapatìlìyor, PIC deºerleri iade ediliyor
- OUT &H21, Sakla(24)
- OUT &HA1, Sakla(25)
-
- '===========================================================================
- 'Bizim modeme ait IRQ'nun, Com2'ye ait interruptu kullanmasì saºlanìyor
- IntAdres = (IrqNo + 8) * 4
- POKE IntAdres, PEEK(44)
- POKE IntAdres + 1, PEEK(45)
- POKE IntAdres + 2, PEEK(46)
- POKE IntAdres + 3, PEEK(47)
-
- '===========================================================================
- 'Bizim modemin IRQ'su için 8259'dan izin alìnìyor
- RESTORE IRQSerbest
- REDIM Oku(31)
- DEF SEG = VARSEG(Oku(0))
-
- FOR PicMask = 0 TO 31
- READ D%
- IF PicMask = 7 THEN D% = IrqNo
- POKE VARPTR(Oku(0)) + PicMask, D%
- NEXT PicMask
-
- CALL ABSOLUTE(VARPTR(Oku(0)))
-
- 'Modemin açìlmasì tamamlandì
- END SUB
-
- SUB ModemiKapa (ModemAdresi)
-
- '===========================================================================
- 'Modem kapatìlìyor
-
- PRINT #1, "ATH"
- OUT ModemAdresi + 4, (INP(ModemAdresi + 4) AND 252)
- CLOSE #1
-
- '===========================================================================
- 'Eski deºerler iade ediliyor
-
- DEF SEG = 0
- FOR I = 40 TO 63: 'ÿnterrupt adresleri
- POKE I, Sakla(I - 40)
- NEXT
- OUT &H21, Sakla(24) 'PIC deºerleri
- OUT &HA1, Sakla(25)
- POKE 1026, Sakla(26) 'Com2 adresi
- POKE 1027, Sakla(27)
-
- END SUB
-
- SUB Terminal
- COLOR 7, 1
- CLS
- LOCATE 1, 1, 1: PRINT "Modem ÿnstall ediliyor"
- PRINT #1, "ATZ"
- RR = FIX(TIMER)
- DO
- IF LOC(1) > 0 THEN B$ = B$ + INPUT$(LOC(1), #1)
- IF INSTR(B$, "OK") > 0 THEN EXIT DO
- IF FIX(TIMER) - RR > 5 THEN
- PRINT "Modem Port Adresi ve IRQ deºerleri hatalì !!"
- RETURN
- END IF
- LOOP
-
- LOCATE 1, 1, 1: PRINT "Modem uygun bulundu, baƒladì (Çìkìƒ için Esc)"
- DO
- A$ = INKEY$
- IF A$ <> "" THEN
- IF ASC(A$) = 27 THEN EXIT DO
- PRINT #1, A$; : 'Modem girdisi
- ELSE
- IF LOC(1) > 0 THEN
- B$ = INPUT$(LOC(1), #1): Gelen$ = Gelen$ + B$
- Z = 0
- IF INSTR(Gelen$, CHR$(0) + CHR$(72)) > 0 THEN Z = 1: PRINT "Yukarì Cursore basìldì"
- IF INSTR(Gelen$, CHR$(0) + CHR$(80)) > 0 THEN Z = 1: PRINT "Aƒaºì Cursore basìldì"
- IF INSTR(Gelen$, CHR$(0) + CHR$(75)) > 0 THEN Z = 1: PRINT "Sol Cursore basìldì"
- IF INSTR(Gelen$, CHR$(0) + CHR$(77)) > 0 THEN Z = 1: PRINT "Saº Cursore basìldì"
- IF Z = 1 THEN Gelen$ = ""
- IF Z = 0 THEN PRINT #2, B$; : 'Diºer tuƒ
- END IF
- END IF
- LOOP
- END SUB
-
-